<html>
 <head>
  <meta charset="UTF-8">
 </head>
 <body>
  <h1 data-lake-id="QR3yH" id="QR3yH"><span data-lake-id="uef312f96" id="uef312f96">典型回答</span></h1>
  <p data-lake-id="ue43855b0" id="ue43855b0"><br></p>
  <p data-lake-id="ud26882b5" id="ud26882b5"><span data-lake-id="ud411bb06" id="ud411bb06">假如有一个联合索引，（a,b），那么如下两个SQL的性能有差别么？</span></p>
  <p data-lake-id="u47ddb24f" id="u47ddb24f"><br></p>
  <pre lang="java"><code>
SELECT * FROM my_table WHERE a = 'value' AND b = 'value2';
SELECT * FROM my_table WHERE b = 'value2' AND a = 'value';
</code></pre>
  <p data-lake-id="uf58599f3" id="uf58599f3"><span data-lake-id="u8c93ff03" id="u8c93ff03">​</span><br></p>
  <p data-lake-id="ub04caa83" id="ub04caa83"><span data-lake-id="u29095200" id="u29095200">其实是没啥影响的，</span><strong><span data-lake-id="ua22e35e5" id="ua22e35e5">也就是说WHERE 子句后面多个字段的先后顺序通常不会影响查询的结果</span></strong><span data-lake-id="u7567e1f9" id="u7567e1f9">。MySQL查询的WHERE子句只是用来过滤满足指定条件的行，而不涉及字段之间的顺序。</span></p>
  <p data-lake-id="u2a9d7a9a" id="u2a9d7a9a"><br></p>
  <p data-lake-id="u433a274a" id="u433a274a"><span data-lake-id="u6d660df3" id="u6d660df3" class="lake-fontsize-12" style="color: rgb(51, 51, 51)">因为有查询优化器的存在，字段的先后顺序并不重要，不信的话可以explain看一下上面两个SQL的执行计划，都是可以命中(a,b)的联合索引的。</span></p>
  <p data-lake-id="u0fa12745" id="u0fa12745"><span data-lake-id="u52bc571c" id="u52bc571c" class="lake-fontsize-12" style="color: rgb(51, 51, 51)">​</span><br></p>
  <p data-lake-id="uaa57731e" id="uaa57731e"><span data-lake-id="uf29c748d" id="uf29c748d" class="lake-fontsize-12" style="color: rgb(51, 51, 51)">​</span><br></p>
 </body>
</html>